package model.algorithmes;

import model.value.VersionnedValue;

import model.subject.Sensor;

/**
 * Interface définissant les fonctionnalités d'un algorithme au sens du pattern Strategy. L'algorithme peut être configuré, puis être exécuté.
 * En l'occurence SpreadingAlgorithme définit une configuration dans un cadre de propagation de changement d'état d'un sujet à ses observeurs.
 */
public interface SpreadingAlgorithme {
	
	/**
	 * Configuration de l'algorithme en spécifiant le sujet.
	 * @param sensor	Le sujet dont on veut propager les changements d'états.
	 */
	public void configure(Sensor sensor);

	/**
	 * Modification de la valeur de l'algorithme.
	 * @param value		La nouvelle valeur de l'algorithme.
	 */
	public void setValue(int value);
	
	/** 
	 * Récupération de la valeur de l'algorithme.
	 * @return	La valeur de l'algorithme.
	 */
	public VersionnedValue getValue();
	
	/**
	 * Execute l'algorithme.
	 */
	public void execute();
	
}
